home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload Trio 2 / Shareware Overload Trio Volume 2 (Chestnut CD-ROM).ISO / dir34 / cdfda.zip / CDFDA.CLA next >
Text File  |  1994-09-29  |  35KB  |  441 lines

  1.  
  2.        PROGRAM
  3.  
  4.        ! This source code is provided as an example of Clarion 3.0 programming.
  5.        ! It may not be charged for, either in this or in compiled form.
  6.  
  7.        ! Author:
  8.        !    Vince Sorensen
  9.        !    6 Armstrong Bay
  10.        !    Regina Sk
  11.        !    S4N 4G7
  12.        !    Canada
  13.  
  14.        INCLUDE('KEYCODES.EQU')
  15.        INCLUDE('CLARION.EQU')
  16.        INCLUDE('ERRORS.EQU')
  17.  
  18.        MAP
  19.           MODULE ('INTERNAL')
  20.             FindFirst(*CSTRING,*STRING,SHORT),SHORT,RAW,NAME('_findfirst')
  21.             FindNext(*STRING),SHORT,RAW,NAME('_findnext')
  22.           END
  23.        END
  24.  
  25. DirString   CSTRING(64)                          ! Used for Directory to search
  26. DirInfo     GROUP                                ! Necessary DOS file Group
  27.               BYTE,DIM(21)                       ! Used by findfirst
  28. Attrib        BYTE                               ! Attribute in DOS format
  29. DosTime       SHORT                              ! Time in DOS format
  30. DosDate       SHORT                              ! Date in DOS format
  31. Filesize      LONG                               ! Size in BYTES
  32. FileName      CSTRING(13)                        ! File name
  33.             END                                  ! End GROUP
  34. !--------------- The input file
  35.  
  36. GLO:Filespec     CSTRING(64)
  37.  
  38. INFILE           FILE,PRE(IN),DRIVER('Ascii','/FILEBUFFERS=10'),NAME(GLO:Filespec)
  39. RECORD             RECORD
  40. Line                 STRING(132)
  41.                  . .
  42.  
  43. !--------------- The output file
  44.  
  45. OUTNAME STRING(64)
  46.  
  47. OUTFILE          FILE,PRE(OUT),DRIVER('Ascii','/FILEBUFFERS=10'),NAME(OUTNAME),CREATE
  48. RECORD             RECORD
  49. Line                 STRING(132)
  50.                  . .
  51.  
  52. SetOne  QUEUE,PRE(s1)                  ! Table of file names on first (group
  53. FileName  STRING(12)                   ! of) CD-ROMs
  54.         .
  55.  
  56. SetTwo  QUEUE,PRE(s2)                  ! Table of file names on second (group
  57. FileName  STRING(12)                   ! of) CD-ROMs
  58.         .
  59.  
  60.                                        ! Counts
  61. IntDupe1 LONG                          ! Internal duplicates for group 1
  62. IntDupe2 LONG                          ! Internal duplicates for group 2
  63. ExtDupe1 LONG                          ! # of files in group 1 found in group 2
  64. ExtDupe2 LONG                          ! # of files in group 2 found in group 1
  65.  
  66. Where    LONG                          ! Loop Counter
  67. PreviousName STRING(12)                ! Used to determine internal duplication
  68. Title1   STRING(30)                    ! Report title #1
  69. Title2   STRING(30)                    ! Report title #2
  70.  
  71. GraphVersion byte
  72.  
  73. Group1   CSTRING(64)
  74. Group2   CSTRING(64)
  75.  
  76. GH1      STRING(22)
  77. GH2      STRING(22)
  78. GL1      STRING(23)
  79. GL2      STRING(23)
  80. GFL1     STRING(13)
  81. GFL2     STRING(13)
  82. GFR1     STRING(13)
  83. GFR2     STRING(13)
  84. GPL1     STRING(5)
  85. GPL2     STRING(5)
  86. GPR1     STRING(5)
  87. GPR2     STRING(5)
  88.  
  89.    CODE
  90.  
  91.      GLO:Filespec=UPPER(LEFT(COMMAND(1,3)))
  92.      TYPE('CD-ROM Filelist Duplicate Analyzer<13,10>')
  93.      TYPE('FREEWARE (C) 1994 Vince Sorensen<13,10>')
  94.  
  95.      IF CLIP(GLO:Filespec)='' OR CLIP(GLO:Filespec)='-?' OR CLIP(GLO:Filespec)='?' OR CLIP(COMMAND(2,3))='' !───┐ Begin 83
  96.         TYPE('Syntax is:                                             <13,10>')   !■CSA■ │
  97.         TYPE('  CDFDA source_file(s) source_file(s)2 report_file     <13,10>')   !■CSA■ │
  98.         TYPE('                       or                              <13,10>')   !■CSA■ │
  99.         TYPE('  CDFDA source_file(s) source_file(s)2 report_file title1 title2 <13,10>')
  100.         TYPE('                       or                              <13,10>')   !■CSA■ │
  101.         TYPE('  CDFDA source_file(s) source_file(s)2 report_file title1 title2 /GRAPH<13,10>')
  102.         TYPE('Example:                                               <13,10>')   !■CSA■ │
  103.         TYPE('  CDFDA C:\PCB\CDROM1\DIR*. C:\PCB\CDROM2\ALLFILES.BBS OUTPUT.TXT "CD 1" "CD 2" /GRAPH<13,10>')
  104.         RETURN                                                                   !■CSA■ │
  105.      .                                                                           !■CSA■─┘ End 83 IF CLIP(GLO:FILESPEC
  106.  
  107.      TITLE1=COMMAND(4,3)
  108.      TITLE2=COMMAND(5,3)
  109.      IF UPPER(CLIP(Title1))='/GRAPH'                                             !■CSA■─┐ 97
  110.         TITLE1=''                                                                !■CSA■ │
  111.      .                                                                           !■CSA■─┘ End 97 IF UPPER(CLIP(TITLE1
  112.      IF UPPER(CLIP(Title2))='/GRAPH'                                             !■CSA■─┐ 100
  113.         TITLE2=''                                                                !■CSA■ │
  114.      .                                                                           !■CSA■─┘ End 100 IF UPPER(CLIP(TITLE2
  115.  
  116.      IF COMMAND('/GRAPH',3)                                                      !■CSA■─┐ 104
  117.         GraphVersion=True                                                        !■CSA■ │
  118.      .                                                                           !■CSA■─┘ End 104 IF COMMAND('/GRAPH',
  119.  
  120.      OutName = UPPER(LEFT(COMMAND(3,3)))
  121.      IF CLIP(OutName)='' OR SUB(OUTNAME,1,1)='/'                                 !■CSA■─┐ 109
  122.         OutName='CDFDA.RPT'                                                      !■CSA■ │
  123.      .                                                                           !■CSA■─┘ End 109 IF CLIP(OUTNAME)=''
  124.  
  125.      GROUP1=UPPER(LEFT(COMMAND(1,3)))
  126.      GROUP2=UPPER(LEFT(COMMAND(2,3)))
  127.  
  128.      IF CLIP(TITLE1)=''                                                          !■CSA■─┐ 116
  129.         TITLE1=GROUP1                                                            !■CSA■ │
  130.      .                                                                           !■CSA■─┘ End 116 IF CLIP(TITLE1)=''
  131.      IF CLIP(TITLE2)=''                                                          !■CSA■─┐ 119
  132.         TITLE2=GROUP2                                                            !■CSA■ │
  133.      .                                                                           !■CSA■─┘ End 119 IF CLIP(TITLE2)=''
  134.  
  135.      DirString=GROUP2
  136.      IF FindFirst(DirString,DirInfo,FA_NORMAL) <> 0 !If unexpected error         !■CSA■─┐ 124
  137.         TYPE('No files matching '&DirString)                                     !■CSA■ │
  138.         RETURN                                                                   !■CSA■ │
  139.      .                                                                           !■CSA■─┘ End 124 IF FINDFIRST(DIRSTRI
  140.      DirString=GROUP1
  141.      IF FindFirst(DirString,DirInfo,FA_NORMAL) <> 0 !If unexpected error         !■CSA■─┐ 129
  142.         TYPE('No files matching '&DirString)                                     !■CSA■ │
  143.         RETURN                                                                   !■CSA■ │
  144.      .                                                                           !■CSA■─┘ End 129 IF FINDFIRST(DIRSTRI
  145.  
  146.  
  147.      Where=0
  148.      LOOP                                                                        !■CSA■─┐ 136
  149.                                                                                  !■CSA■ │
  150.                                                                                  !■CSA■ │
  151.         CLOSE(INFILE)                                                            !■CSA■ │
  152.         GLO:Filespec=FileName                     !  Fill the queue field        !■CSA■ │
  153.         LOOP xx# = LEN(CLIP(Group1)) to 1 by -1                                  !■CSA■ ├─┐141
  154.            IF SUB(Group1,xx#,1)='\'                                              !■CSA■ │ ├─┐142
  155.               GLO:Filespec=SUB(Group1,xx#,1)&GLO:Filespec                        !■CSA■ │ │ │
  156.               BREAK                                                              !■CSA■ │ │ │
  157.            .                                                                     !■CSA■ │ ├─┘ End 142 IF SUB(GROUP1,XX#,1)
  158.         .                                                                        !■CSA■ ├─┘ End 141 LOOP XX# = LEN(CLIP(
  159.         OPEN(INFILE)                                                             !■CSA■ │
  160.         ERR#=SEND(INFILE,'QUICKSCAN=ON')                                         !■CSA■ │
  161.                                                                                  !■CSA■ │
  162.         SET(INFILE)                                                              !■CSA■ │
  163.         IF ERRORCODE()                                                           !■CSA■ ├─┐151
  164.            TYPE('Error '&ERROR())                                                !■CSA■ │ │
  165.            RETURN                                                                !■CSA■ │ │
  166.         .                                                                        !■CSA■ ├─┘ End 151 IF ERRORCODE()
  167.         LOOP                                                                     !■CSA■ ├─┐155
  168.            NEXT(INFILE)                                                          !■CSA■ │ │
  169.            IF ERRORCODE() = 33                                                   !■CSA■ │ ├─┐157
  170.               BREAK                                                              !■CSA■ │ │ │
  171.            .                                                                     !■CSA■ │ ├─┘ End 157 IF ERRORCODE() = 33
  172.            Where+=1                                                              !■CSA■ │ │
  173.            s1:FileName=LEFT(UPPER(IN:Line))                                      !■CSA■ │ │
  174.            IF ~INSTRING('.',s1:FileName,1)                                       !■CSA■ │ ├─┐162
  175.               CYCLE                                                              !■CSA■ │ │ │
  176.            .                                                                     !■CSA■ │ ├─┘ End 162 IF ~INSTRING('.',S1:
  177.            ADD(SetOne)                                                           !■CSA■ │ │
  178.            IF Where/10=INT(Where/10)                                             !■CSA■ │ ├─┐166
  179.               TYPE('Read: '&FORMAT(Where,@n9)&'<13>')                            !■CSA■ │ │ │
  180.               IF KEYBOARD()                                                      !■CSA■ │ │ ├─┐168
  181.                  ASK                                                             !■CSA■ │ │ │ │
  182.                  IF KEYCODE()=EscKey                                             !■CSA■ │ │ │ ├─┐170
  183.                     TYPE('<13,10>Processing cancelled with Esc key')             !■CSA■ │ │ │ │ │
  184.                     DO Results                                                   !■CSA■ │ │ │ │ │
  185.                     RETURN                                                       !■CSA■ │ │ │ │ │
  186.                  .                                                               !■CSA■ │ │ │ ├─┘ End 170 IF KEYCODE()=ESCKEY
  187.               .                                                                  !■CSA■ │ │ ├─┘ End 168 IF KEYBOARD()
  188.            .                                                                     !■CSA■ │ ├─┘ End 166 IF WHERE/10=INT(WHER
  189.         .                                                                        !■CSA■ ├─┘ End 155 LOOP
  190.         CLOSE(INFILE)                                                            !■CSA■ │
  191.         IF FindNext(DirInfo) <> 0                 ! Get the next entry           !■CSA■ ├─┐179
  192.            BREAK                                  !  Break if unexpected error   !■CSA■ │ │
  193.         END                                       ! End IF                       !■CSA■ ├─┘ End 179 IF FINDNEXT(DIRINFO)
  194.      .                                                                           !■CSA■─┘ End 136 LOOP
  195.  
  196.      GLO:Filespec=UPPER(LEFT(COMMAND(2,3)))
  197.      DirString=GROUP2
  198.      IF FindFirst(DirString,DirInfo,FA_NORMAL) <> 0 !If unexpected error         !■CSA■─┐ 186
  199.         TYPE('No files matching '&DirString)                                     !■CSA■ │
  200.         RETURN                                                                   !■CSA■ │
  201.      .                                                                           !■CSA■─┘ End 186 IF FINDFIRST(DIRSTRI
  202.      LOOP                                                                        !■CSA■─┐ 190
  203.         CLOSE(INFILE)                                                            !■CSA■ │
  204.         GLO:Filespec=FileName                     !  Fill the queue field        !■CSA■ │
  205.         LOOP xx# = LEN(CLIP(Group2)) to 1 by -1                                  !■CSA■ ├─┐193
  206.            IF SUB(Group2,xx#,1)='\'                                              !■CSA■ │ ├─┐194
  207.               GLO:Filespec=SUB(Group2,xx#,1)&GLO:Filespec                        !■CSA■ │ │ │
  208.               BREAK                                                              !■CSA■ │ │ │
  209.            .                                                                     !■CSA■ │ ├─┘ End 194 IF SUB(GROUP2,XX#,1)
  210.         .                                                                        !■CSA■ ├─┘ End 193 LOOP XX# = LEN(CLIP(
  211.         OPEN(INFILE)                                                             !■CSA■ │
  212.         ERR#=SEND(INFILE,'QUICKSCAN=ON')                                         !■CSA■ │
  213.         SET(INFILE)                                                              !■CSA■ │
  214.         IF ERRORCODE()                                                           !■CSA■ ├─┐202
  215.            TYPE('Error '&ERROR())                                                !■CSA■ │ │
  216.            RETURN                                                                !■CSA■ │ │
  217.         .                                                                        !■CSA■ ├─┘ End 202 IF ERRORCODE()
  218.                                                                                  !■CSA■ │
  219.         LOOP                                                                     !■CSA■ ├─┐207
  220.            NEXT(INFILE)                                                          !■CSA■ │ │
  221.            IF ERRORCODE() = 33                                                   !■CSA■ │ ├─┐209
  222.               BREAK                                                              !■CSA■ │ │ │
  223.            .                                                                     !■CSA■ │ ├─┘ End 209 IF ERRORCODE() = 33
  224.            Where+=1                                                              !■CSA■ │ │
  225.            s2:FileName=LEFT(UPPER(IN:Line))                                      !■CSA■ │ │
  226.            IF ~INSTRING('.',s2:FileName,1)                                       !■CSA■ │ ├─┐214
  227.               CYCLE                                                              !■CSA■ │ │ │
  228.            .                                                                     !■CSA■ │ ├─┘ End 214 IF ~INSTRING('.',S2:
  229.            ADD(SetTwo)                                                           !■CSA■ │ │
  230.            IF Where/10=INT(Where/10)                                             !■CSA■ │ ├─┐218
  231.               TYPE('Read: '&FORMAT(Where,@n9)&'<13>')                            !■CSA■ │ │ │
  232.               IF KEYBOARD()                                                      !■CSA■ │ │ ├─┐220
  233.                  ASK                                                             !■CSA■ │ │ │ │
  234.                  IF KEYCODE()=EscKey                                             !■CSA■ │ │ │ ├─┐222
  235.                     TYPE('<13,10>Processing cancelled with Esc key')             !■CSA■ │ │ │ │ │
  236.                     DO Results                                                   !■CSA■ │ │ │ │ │
  237.                     RETURN                                                       !■CSA■ │ │ │ │ │
  238.                  .                                                               !■CSA■ │ │ │ ├─┘ End 222 IF KEYCODE()=ESCKEY
  239.               .                                                                  !■CSA■ │ │ ├─┘ End 220 IF KEYBOARD()
  240.            .                                                                     !■CSA■ │ ├─┘ End 218 IF WHERE/10=INT(WHER
  241.         .                                                                        !■CSA■ ├─┘ End 207 LOOP
  242.         CLOSE(INFILE)                                                            !■CSA■ │
  243.         IF FindNext(DirInfo) <> 0                 ! Get the next entry           !■CSA■ ├─┐231
  244.            BREAK                                  !  Break if unexpected error   !■CSA■ │ │
  245.         END                                       ! End IF                       !■CSA■ ├─┘ End 231 IF FINDNEXT(DIRINFO)
  246.      .                                                                           !■CSA■─┘ End 190 LOOP
  247.  
  248.      TYPE('<10,13>Sorting<13>')
  249.      SORT(SetOne,s1:FileName)
  250.      SORT(SetTwo,s2:FileName)
  251.  
  252.      IF RECORDS(SetOne)=0 OR RECORDS(SetTwo)=0                                   !■CSA■─┐ 240
  253.         TYPE('No filenames found in one or more of the files specified.<13,10>') !■CSA■ │
  254.         RETURN                                                                   !■CSA■ │
  255.      .                                                                           !■CSA■─┘ End 240 IF RECORDS(SetOne)=0
  256.  
  257.      PreviousName=''
  258.      TYPE('Checking '&COMMAND(1,3)&'<10,13>')
  259.      LOOP Where = 1 TO RECORDS(SetOne)                                           !■CSA■─┐ 247
  260.         IF Where/10=INT(Where/10)                                                !■CSA■ ├─┐248
  261.            TYPE(Where & ' Internal Dupes: '&INT(IntDupe1*10000/Where)/100&'%   External: '&INT(ExtDupe1*10000/Where)/100&'%   <13>')
  262.            IF KEYBOARD()                                                         !■CSA■ │ ├─┐250
  263.               ASK                                                                !■CSA■ │ │ │
  264.               IF KEYCODE()=EscKey                                                !■CSA■ │ │ ├─┐252
  265.                  TYPE('<13,10>Processing cancelled with Esc key')                !■CSA■ │ │ │ │
  266.                  DO Results                                                      !■CSA■ │ │ │ │
  267.                  RETURN                                                          !■CSA■ │ │ │ │
  268.               .                                                                  !■CSA■ │ │ ├─┘ End 252 IF KEYCODE()=ESCKEY
  269.            .                                                                     !■CSA■ │ ├─┘ End 250 IF KEYBOARD()
  270.         .                                                                        !■CSA■ ├─┘ End 248 IF WHERE/10=INT(WHER
  271.         GET(SetOne,Where)                                                        !■CSA■ │
  272.         IF PreviousName=s1:FileName                                              !■CSA■ ├─┐260
  273.            IntDupe1+=1                                                           !■CSA■ │ │
  274.         .                                                                        !■CSA■ ├─┘ End 260 IF PREVIOUSNAME=S1:F
  275.         PreviousName=s1:FileName                                                 !■CSA■ │
  276.         S2:FILENAME=S1:FILENAME                                                  !■CSA■ │
  277.         GET(SetTwo,s2:FileName)                                                  !■CSA■ │
  278.         IF ~ERRORCODE()                                                          !■CSA■ ├─┐266
  279.            ExtDupe1+=1                                                           !■CSA■ │ │
  280.         .                                                                        !■CSA■ ├─┘ End 266 IF ~ERRORCODE()
  281.      .                                                                           !■CSA■─┘ End 247 LOOP WHERE = 1 TO RE
  282.  
  283.      TYPE('<13,10>')
  284.      PreviousName=''
  285.      TYPE('Checking '&COMMAND(2,3)&'<10,13>')
  286.      LOOP Where = 1 TO RECORDS(SetTwo)                                           !■CSA■─┐ 274
  287.         IF Where/10=INT(Where/10)                                                !■CSA■ ├─┐275
  288.            TYPE(Where & '  Internal Dupes: '&INT(IntDupe2*10000/Where)/100&'%   External: '&INT(ExtDupe2*10000/Where)/100&'%   <13>')
  289.            IF KEYBOARD()                                                         !■CSA■ │ ├─┐277
  290.               ASK                                                                !■CSA■ │ │ │
  291.               IF KEYCODE()=EscKey                                                !■CSA■ │ │ ├─┐279
  292.                  TYPE('<13,10>Processing cancelled with Esc key')                !■CSA■ │ │ │ │
  293.                  DO Results                                                      !■CSA■ │ │ │ │
  294.                  RETURN                                                          !■CSA■ │ │ │ │
  295.               .                                                                  !■CSA■ │ │ ├─┘ End 279 IF KEYCODE()=ESCKEY
  296.            .                                                                     !■CSA■ │ ├─┘ End 277 IF KEYBOARD()
  297.         .                                                                        !■CSA■ ├─┘ End 275 IF WHERE/10=INT(WHER
  298.         GET(SetTwo,Where)                                                        !■CSA■ │
  299.         IF PreviousName=s2:FileName                                              !■CSA■ ├─┐287
  300.            IntDupe2+=1                                                           !■CSA■ │ │
  301.         .                                                                        !■CSA■ ├─┘ End 287 IF PREVIOUSNAME=S2:F
  302.         PreviousName=s2:FileName                                                 !■CSA■ │
  303.         S1:FILENAME=S2:FILENAME                                                  !■CSA■ │
  304.         GET(SetOne,s1:FileName)                                                  !■CSA■ │
  305.         IF ~ERRORCODE()                                                          !■CSA■ ├─┐293
  306.            ExtDupe2+=1                                                           !■CSA■ │ │
  307.         .                                                                        !■CSA■ ├─┘ End 293 IF ~ERRORCODE()
  308.      .                                                                           !■CSA■─┘ End 274 LOOP WHERE = 1 TO RE
  309.      DO Results
  310.  
  311.  
  312. Results ROUTINE
  313.      IF KEYCODE()<>EscKey                                                        !■CSA■─┐ 301
  314.         CREATE(OUTFILE)                                                          !■CSA■ │
  315.         OPEN(OUTFILE)                                                            !■CSA■ │
  316.         IF ERRORCODE()                                                           !■CSA■ ├─┐304
  317.            TYPE('Error '&ERROR())                                                !■CSA■ │ │
  318.            RETURN                                                                !■CSA■ │ │
  319.         .                                                                        !■CSA■ ├─┘ End 304 IF ERRORCODE()
  320.      ELSE                                                                        !■CSA■ │
  321.         TYPE('Results to cancellation point:<13,10>')                            !■CSA■ │
  322.      .                                                                           !■CSA■─┘ End 301 IF KEYCODE()<>ESCKEY
  323.      IF ~GRAPHVERSION                                                            !■CSA■─┐ 311
  324.         Out:Line = 'Comparing '&CLIP(TITLE1)&'  to '&CLIP(TITLE2)                !■CSA■ │
  325.         DO AddOut                                                                !■CSA■ │
  326.         Out:Line = CLIP(TITLE1)&' internal duplicates: '&IntDupe1&' out of '&RECORDS(SetOne)&' files or '&INT(IntDupe1/RECORDS(SetOne)*10000)/100&'%'
  327.         DO AddOut                                                                !■CSA■ │
  328.         Out:Line = CLIP(TITLE1)&' duplicates found in '&CLIP(TITLE2)&': '&ExtDupe1&' out of '&RECORDS(SetOne)&' files or '&INT(ExtDupe1/RECORDS(SetOne)*10000)/100&'%'
  329.         DO AddOut                                                                !■CSA■ │
  330.         Out:Line = CLIP(TITLE2)&' internal duplicates: '&IntDupe2&' out of '&RECORDS(SetTwo)&' files or '&INT(IntDupe2/RECORDS(SetTwo)*10000)/100&'%'
  331.         DO AddOut                                                                !■CSA■ │
  332.         Out:Line = CLIP(TITLE2)&' duplicates found in '&CLIP(TITLE1)&': '&ExtDupe2&' out of '&RECORDS(SetTwo)&' files or '&INT(ExtDupe2/RECORDS(SetTwo)*10000)/100&'%'
  333.         DO AddOut                                                                !■CSA■ │
  334.      ELSE                                                                        !■CSA■ │
  335.         GH1 = CENTER(TITLE1,22)                                                  !■CSA■ │
  336.         GH2 = CENTER(TITLE2,22)                                                  !■CSA■ │
  337.         GL1 = RIGHT(TITLE1,22)&':'                                               !■CSA■ │
  338.         GL2 = RIGHT(TITLE2,22)&':'                                               !■CSA■ │
  339.                                                                                  !■CSA■ │
  340.         GFL1 = IntDupe1&'/'&RECORDS(SetOne)                                      !■CSA■ │
  341.         GFL2 = ExtDupe2&'/'&RECORDS(SetTwo)                                      !■CSA■ │
  342.         GFR1 = ExtDupe1&'/'&RECORDS(SetOne)                                      !■CSA■ │
  343.         GFR2 = IntDupe2&'/'&RECORDS(SetTwo)                                      !■CSA■ │
  344.                                                                                  !■CSA■ │
  345.         IF Records(SetOne)<10000 AND Records(SetTwo)<10000                       !■CSA■ ├─┐333
  346.            GFL1 = FORMAT(IntDupe1,@n_4)&'/'&RECORDS(SetOne)                      !■CSA■ │ │
  347.            GFL2 = FORMAT(ExtDupe2,@n_4)&'/'&RECORDS(SetTwo)                      !■CSA■ │ │
  348.            GFR1 = FORMAT(ExtDupe1,@n_4)&'/'&RECORDS(SetOne)                      !■CSA■ │ │
  349.            GFR2 = FORMAT(IntDupe2,@n_4)&'/'&RECORDS(SetTwo)                      !■CSA■ │ │
  350.         .                                                                        !■CSA■ ├─┘ End 333 IF RECORDS(SetOne)<1
  351.                                                                                  !■CSA■ │
  352.         IF INT(IntDupe1/RECORDS(SetOne)*10000)/100<100                           !■CSA■ ├─┐340
  353.            GPL1 = FORMAT(INT(IntDupe1/RECORDS(SetOne)*10000)/100,@N5.2)          !■CSA■ │ │
  354.         ELSE                                                                     !■CSA■ │ │
  355.            GPL1 = INT(IntDupe1/RECORDS(SetOne)*10000)/100                        !■CSA■ │ │
  356.         .                                                                        !■CSA■ ├─┘ End 340 IF INT(INTDUPE1/RECO
  357.         IF INT(ExtDupe2/RECORDS(SetTwo)*10000)/100<100                           !■CSA■ ├─┐345
  358.            GPL2 = FORMAT(INT(ExtDupe2/RECORDS(SetTwo)*10000)/100,@N5.2)          !■CSA■ │ │
  359.         ELSE                                                                     !■CSA■ │ │
  360.            GPL2 = INT(ExtDupe2/RECORDS(SetTwo)*10000)/100                        !■CSA■ │ │
  361.         .                                                                        !■CSA■ ├─┘ End 345 IF INT(EXTDUPE2/RECO
  362.         IF INT(ExtDupe1/RECORDS(SetOne)*10000)/100<100                           !■CSA■ ├─┐350
  363.            GPR1 = FORMAT(INT(ExtDupe1/RECORDS(SetOne)*10000)/100,@N5.2)          !■CSA■ │ │
  364.         ELSE                                                                     !■CSA■ │ │
  365.            GPR1 = INT(ExtDupe1/RECORDS(SetOne)*10000)/100                        !■CSA■ │ │
  366.         .                                                                        !■CSA■ ├─┘ End 350 IF INT(EXTDUPE1/RECO
  367.         IF INT(IntDupe2/RECORDS(SetTwo)*10000)/100<100                           !■CSA■ ├─┐355
  368.            GPR2 = FORMAT(INT(IntDupe2/RECORDS(SetTwo)*10000)/100,@N5.2)          !■CSA■ │ │
  369.         ELSE                                                                     !■CSA■ │ │
  370.            GPR2 = INT(IntDupe2/RECORDS(SetTwo)*10000)/100                        !■CSA■ │ │
  371.         .                                                                        !■CSA■ ├─┘ End 355 IF INT(INTDUPE2/RECO
  372.                                                                                  !■CSA■ │
  373.         !GPL1 = INT(IntDupe1/RECORDS(SetOne)*10000)/100                          !■CSA■ │
  374.         !GPL2 = INT(ExtDupe2/RECORDS(SetTwo)*10000)/100                          !■CSA■ │
  375.         !GPR1 = INT(ExtDupe1/RECORDS(SetOne)*10000)/100                          !■CSA■ │
  376.         !GPR2 = INT(IntDupe2/RECORDS(SetTwo)*10000)/100                          !■CSA■ │
  377.                                                                                  !■CSA■ │
  378.         Out:Line = '╔═══════════════════════════════════════════════════════════════════════════╗'
  379.         DO AddOut                                                                !■CSA■ │
  380.         Out:Line = '║                     CD-ROM FILELIST DUPLICATE ANALYZER                    ║'
  381.         DO AddOut                                                                !■CSA■ │
  382.         Out:Line = '║                          (c) 1994 Vince Sorensen                          ║'
  383.         DO AddOut                                                                !■CSA■ │
  384.         Out:Line = '║                                                                           ║'
  385.         DO AddOut                                                                !■CSA■ │
  386.         Out:Line = '║                         ┌────────────────────────┬────────────────────────╢'
  387.         DO AddOut                                                                !■CSA■ │
  388.         Out:Line = '║                         │ ' & gh1 &               ' │ ' & gh2 &            ' ║'
  389.         DO AddOut                                                                !■CSA■ │
  390.         Out:Line = '║                         │ FILES           DUPE % │ FILES           DUPE % ║'
  391.         DO AddOut                                                                !■CSA■ │
  392.         Out:Line = '╟─────────────────────────┼────────────────────────┼────────────────────────╢'
  393.         DO AddOut                                                                !■CSA■ │
  394.         Out:Line = '║                         │                        │                        ║'
  395.         DO AddOut                                                                !■CSA■ │
  396.         Out:Line = '║ ' & gl1 &                ' │ '&GFL1&     '   '&GPL1&'  │ '&GFR1&  '   '&GPR1&'  ║'
  397.         DO AddOut                                                                !■CSA■ │
  398.         Out:Line = '║                         │                        │                        ║'
  399.         DO AddOut                                                                !■CSA■ │
  400.         Out:Line = '╟─────────────────────────┼────────────────────────┼────────────────────────╢'
  401.         DO AddOut                                                                !■CSA■ │
  402.         Out:Line = '║                         │                        │                        ║'
  403.         DO AddOut                                                                !■CSA■ │
  404.         Out:Line = '║ ' & gl2 &                ' │ '&GFL2&     '   '&GPL2&'  │ '&GFR2&  '   '&GPR2&'  ║'
  405.         DO AddOut                                                                !■CSA■ │
  406.         Out:Line = '║                         │                        │                        ║'
  407.         DO AddOut                                                                !■CSA■ │
  408.         Out:Line = '╚═════════════════════════╧════════════════════════╧════════════════════════╝'
  409.         DO AddOut                                                                !■CSA■ │
  410.         Out:Line = ''                                                            !■CSA■ │
  411.         DO AddOut                                                                !■CSA■ │
  412.         Out:Line = 'Average duplication rate: '   ! & Format(INT((ExtDupe1+ExtDupe2)/(RECORDS(SetTwo)+RECORDS(SetOne))*10000)/100,@n6.2)&'%'
  413.         DO AddOut                                                                !■CSA■ │
  414.         Out:Line = SUB('▒{80}',1,(ExtDupe1+ExtDupe2)/(RECORDS(SetTwo)+RECORDS(SetOne))*75) & Format(INT((ExtDupe1+ExtDupe2)/(RECORDS(SetTwo)+RECORDS(SetOne))*10000)/100,@n6.2)&'%'
  415.         DO AddOut                                                                !■CSA■ │
  416.         Out:Line = ''                                                            !■CSA■ │
  417.         DO AddOut                                                                !■CSA■ │
  418.         Out:Line = 'If you have '&CLIP(TITLE1)&', '&CLIP(TITLE2)&' will duplicate '&INT(ExtDupe1/RECORDS(SetOne)*10000)/100&'% of what you already have.'
  419.         DO AddOut                                                                !■CSA■ │
  420.         Out:Line = SUB('▒{80}',1,ExtDupe1/RECORDS(SetOne)*75)&FORMAT(INT(ExtDupe1/RECORDS(SetOne)*10000)/100,@n6.2)&'%'
  421.         DO AddOut                                                                !■CSA■ │
  422.         Out:Line = ''                                                            !■CSA■ │
  423.         DO AddOut                                                                !■CSA■ │
  424.         Out:Line = 'If you have '&CLIP(TITLE2)&', '&CLIP(TITLE1)&' will duplicate '&INT(ExtDupe2/RECORDS(SetTwo)*10000)/100&'% of what you already have.'
  425.         DO AddOut                                                                !■CSA■ │
  426.         Out:Line = SUB('▒{80}',1,ExtDupe2/RECORDS(SetTwo)*75)&FORMAT(INT(ExtDupe2/RECORDS(SetTwo)*10000)/100,@n6.2)&'%'
  427.         DO AddOut                                                                !■CSA■ │
  428.         Out:Line = ''                                                            !■CSA■ │
  429.         DO AddOut                                                                !■CSA■ │
  430.      .                                                                           !■CSA■─┘ End 311 IF ~GRAPHVERSION
  431.      IF KEYCODE()<>EscKey                                                        !■CSA■─┐ 419
  432.         CLOSE(OUTFILE)                                                           !■CSA■ │
  433.      .                                                                           !■CSA■─┘ End 419 IF KEYCODE()<>ESCKEY
  434.  
  435. AddOut ROUTINE
  436.      TYPE(CLIP(OUT:Line)&'<13,10>')
  437.      IF KEYCODE()<>EscKey                                                        !■CSA■─┐ 425
  438.         ADD(OUTFILE)                                                             !■CSA■ │
  439.      .                                                                           !■CSA■─┘ End 425 IF KEYCODE()<>ESCKEY
  440.      EXIT
  441.